#ifndef _ROBOT_H_
#define _ROBOT_H_
#include <iostream>
#include "Obstacle.h"
#include "Objet.h"
#include "Position.h"
#include "EtatRobot.h"
#include "Affichable.h"


using namespace std;
class EtatRobot;

class Robot : public Affichable{
private:
	EtatRobot* _ancienEtat;
	EtatRobot* _etat;
	string _direction;
	Position * _position;
	Objet * _objet;
	Obstacle* _obstacle;
	void _avancer(int x, int y);
	void _tourner(string direction);
	void _saisir(Objet * objet);
	void _poser();
	int _peser();
	void _rencontrerObstacle(Obstacle * o);
	int _evaluerObstacle();
public:
	Robot();
	
	//Fonctionnalites du robot
	void avancer(int x, int y);
	void tourner(string direction);
	void saisir(Objet * objet);
	void poser();
	int peser();
	void rencontrerObstacle(Obstacle * o);
	int evaluerObstacle();
	void figer();
	void repartir();
	
	// Gestion des etats
	void changerEtat(EtatRobot * nouvelEtat);
	void setAncienEtat(EtatRobot * nouvelEtat);
	EtatRobot * getCurrentState();
	EtatRobot * getAncienEtat();

	// Setters
	void setObjet(Objet*);
	void setDirection(string);
	void setObstacle(Obstacle*);
	void setPosition(Position*);
	// Getters
	Obstacle* getObstacle();
	Objet * getObjet();
	Position * getPosition();
	string getDirection();
};

#endif
